using System;
using System.Net;
using System.Runtime.InteropServices;

namespace SDK.Scripts.Network
{
	[Serializable]
	[StructLayout(LayoutKind.Sequential, Pack = 1)]
	public class ProxyMsg : BaseMsg
	{
		public int mLen;

		public byte mType;

		public byte mOption;

		public byte type;

		public int serverid;

		public byte mCmd;

		public int mSeq;

		public override bool encodeHead(ref byte[] bytes)
		{
			int num = 0;
			ConvertByte(mLen, bytes, num);
			num += Marshal.SizeOf(mLen.GetType());
			ConvertByte(mType, bytes, num);
			num += Marshal.SizeOf(mType.GetType());
			ConvertByte(mOption, bytes, num);
			num += Marshal.SizeOf(mOption.GetType());
			ConvertByte(type, bytes, num);
			num += Marshal.SizeOf(type.GetType());
			ConvertByte(serverid, bytes, num);
			num += Marshal.SizeOf(serverid.GetType());
			ConvertByte(mCmd, bytes, num);
			num += Marshal.SizeOf(mCmd.GetType());
			ConvertByte(mSeq, bytes, num);
			num += Marshal.SizeOf(mSeq.GetType());
			return true;
		}

		public override bool decodeHead(ref byte[] bytes)
		{
			int num = Marshal.SizeOf(typeof(ProxyMsg));
			if (bytes.Length < num)
			{
				return false;
			}
			int startIndex = 0;
			byte[] byteResult = null;
			if (SpliteHeadMsg(mLen, bytes, ref startIndex, out byteResult))
			{
				mLen = IPAddress.NetworkToHostOrder(BitConverter.ToInt32(byteResult, 0));
				if (SpliteHeadMsg(mType, bytes, ref startIndex, out byteResult))
				{
					mType = byteResult[0];
					if (SpliteHeadMsg(mOption, bytes, ref startIndex, out byteResult))
					{
						mOption = byteResult[0];
						if (SpliteHeadMsg(type, bytes, ref startIndex, out byteResult))
						{
							type = byteResult[0];
							if (SpliteHeadMsg(serverid, bytes, ref startIndex, out byteResult))
							{
								serverid = IPAddress.NetworkToHostOrder(BitConverter.ToInt32(byteResult, 0));
								if (SpliteHeadMsg(mCmd, bytes, ref startIndex, out byteResult))
								{
									mCmd = byteResult[0];
									if (SpliteHeadMsg(mSeq, bytes, ref startIndex, out byteResult))
									{
										mSeq = IPAddress.NetworkToHostOrder(BitConverter.ToInt32(byteResult, 0));
										return true;
									}
									return false;
								}
								return false;
							}
							return false;
						}
						return false;
					}
					return false;
				}
				return false;
			}
			return false;
		}
	}
}
